package com.wangp.enjoywork.service;

import java.io.FileInputStream;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.thymeleaf.util.StringUtils;

import com.wangp.enjoywork.entity.SeaMan;
import com.wangp.enjoywork.util.TimeUtils;

@Service
public class FormatService {

	private static Logger logger = LoggerFactory.getLogger(FormatService.class);
	
	/**
	 * 判断上船那文件类型是否属于XLS xlsx 类型
	 * @param file
	 * @return
	 */
	public static boolean fileTypeFormatJudgment(MultipartFile file){
		//判断上传文件是否属于xls格式
		String file_name_suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
		logger.info("客户上传文件类型为{}",file_name_suffix);
		//判断上船后缀是否为xls
		if(! file_name_suffix.equalsIgnoreCase("xls") || file_name_suffix.equalsIgnoreCase("xlsx")){
			logger.warn("客户上传的文件类型不是xls/xlsx类型格式,返回错误");
			return false ;
		}
		return true ;
	}
	
	
	/**
	 * 判断上船简历文件内容是否合法
	 * @param file
	 * @return
	 * @throws IOException 
	 * @throws ParseException 
	 */
	public static boolean SignOnContentFormatJudgment(MultipartFile file,SeaMan seaMan) throws IOException, ParseException{
		
		Workbook wb;

		FileInputStream fis = (FileInputStream) file.getInputStream();

		wb = new HSSFWorkbook(fis);

		// 开始解析
		Sheet sheet = wb.getSheetAt(0); // 读取sheet 0
		
		//随机验证3次
		Row row0 = sheet.getRow(0);
		Cell cell0_0 = row0.getCell(0);
		String sign_on_1 = cell0_0.toString().trim();
		logger.info("开始第一次验证上船人员简历表内容");
		if(!sign_on_1.equals("上海国远劳务服务有限公司")){
			logger.warn("第一次验证上船人员简历表，内容为：{}，非“上海国远劳务服务有限公司”，返回错误信息",sign_on_1);
			wb.close();
			return false ;
		}
		
		Row row4 = sheet.getRow(4);
		Cell cell4_0 = row4.getCell(0);
		String sign_on_2 = cell4_0.toString().trim();
		logger.info("开始第二次验证上船人员简历表内容");	
		if(!sign_on_2.equals("Date of birth (出生)：")){
			logger.warn("第二次验证上船人员简历表，内容为：{}，非“Date of birth (出生)：”，返回错误信息",sign_on_2);
			wb.close();
			return false ;
		}
		
		Row row11 = sheet.getRow(11);
		Cell cell11_0 = row11.getCell(0);
		String sign_on_3 = cell11_0.toString().trim();
		logger.info("开始第三次验证上船人员简历表内容");	
		if(!sign_on_3.equals("2.Details of license/certificates(证书)")){
			logger.warn("第三次验证上船人员简历表，内容为：{}，非“2.Details of license/certificates(证书)”，返回错误信息",sign_on_3);
			wb.close();
			return false ;
		}
		
		logger.info("验证上船人员简历表内容完毕，开始获取部分上船人员信息");	
		//设定上船人员生日
		Cell cell4_23 = row4.getCell(23);
		String personId = cell4_23.toString().trim();
		String sign_on_birth_year = personId.substring(6, 10);
		String sign_on_birth_month = personId.substring(10, 12);
		String sign_on_birth_day = personId.substring(12, 14);
		SimpleDateFormat formattor = new SimpleDateFormat("yyyy年MM月");
		seaMan.setSign_on_birth(sign_on_birth_year+"年"+sign_on_birth_month+"月"+sign_on_birth_day+"日");
		
		//设定上船人员姓名
		Row row3 = sheet.getRow(3);
		Cell cell3_27 = row3.getCell(27);
		seaMan.setSign_on_name(cell3_27.toString().trim());
		
		//设定上船人员日期
		seaMan.setSign_on_timeForOn(formattor.format(TimeUtils.modifySignOnTime(new Date())));
		
		//设定上船人员电话
		Row row6 = sheet.getRow(6);
		Cell cell6_23 = row6.getCell(23);
		seaMan.setSign_on_phone(cell6_23.toString().trim());
		
		wb.close();
		
		logger.info("获取上船人员信息完毕");	
		return true;
	}
	
	
	/**
	 * 判断下船简历文件内容是否合法
	 * @param file
	 * @return
	 * @throws IOException 
	 * @throws ParseException 
	 */
	public static boolean SignOffContentFormatJudgment(MultipartFile file,SeaMan seaMan) throws IOException, ParseException{
		
		Workbook wb;

		if(file.isEmpty()){
			return false ;
		}
		FileInputStream fis = (FileInputStream) file.getInputStream();

		wb = new HSSFWorkbook(fis);

		// 开始解析
		Sheet sheet = wb.getSheetAt(0); // 读取sheet 0
		
		
		//随机验证3次
		Row row0 = sheet.getRow(0);
		Cell cell0_0 = row0.getCell(0);
		String sign_on_1 = cell0_0.toString().trim();
		logger.info("开始第一次验证下船人员简历表内容");
		if(!sign_on_1.equals("上海国远劳务服务有限公司")){
			logger.warn("第一次验证下船人员简历表，内容为：{}，非“上海国远劳务服务有限公司”，返回错误信息",sign_on_1);
			wb.close();
			return false ;
		}
		
		Row row4 = sheet.getRow(4);
		Cell cell4_0 = row4.getCell(0);
		String sign_on_2 = cell4_0.toString().trim();
		logger.info("开始第二次验证下船人员简历表内容");
		if(!sign_on_2.equals("Date of birth (出生)：")){
			logger.warn("第二次验证下船人员简历表，内容为：{}，非“Date of birth (出生)：",sign_on_2);
			wb.close();
			return false ;
		}
		
		Row row11 = sheet.getRow(11);
		Cell cell11_0 = row11.getCell(0);
		String sign_on_3 = cell11_0.toString().trim();
		logger.info("开始第三次验证下船人员简历表内容");
		if(!sign_on_3.equals("2.Details of license/certificates(证书)")){
			logger.warn("第三次验证下船人员简历表，内容为：{}，非“2.Details of license/certificates(证书)",sign_on_3);
			wb.close();
			return false ;
		}
		
		logger.info("验证下船人员简历表内容完毕，开始获取部分下船人员信息");	
		
		//设定下船人员生日
		Cell cell4_23 = row4.getCell(23);
		String personId = cell4_23.toString().trim();
		String sign_off_birth_year = personId.substring(6, 10);
		String sign_off_birth_month = personId.substring(10, 12);
		String sign_off_birth_day = personId.substring(12, 14);
		seaMan.setSign_off_birth(sign_off_birth_year+"年"+sign_off_birth_month+"月"+sign_off_birth_day + "日");
		
		//设定下船人员姓名
		Row row3 = sheet.getRow(3);
		Cell cell3_27 = row3.getCell(27);
		seaMan.setSign_off_name(cell3_27.toString().trim());
		
		//设定下船人员的上船日期
		Row row30 = sheet.getRow(30);
		Integer cells[] = new Integer[]{6,12,17,25,31};
		for(int i = cells.length; i > 0; i--){
			Cell cell30_n = row30.getCell(cells[i-1]);
			if(!StringUtils.isEmpty(cell30_n.toString().trim())){
				seaMan.setSign_off_timeForOn(TimeUtils.formatSignOffCrewsOnTime(cell30_n.toString().trim()));
				break;
			}
		}
		
		//设定船舶名称
		Row row29 = sheet.getRow(29);
		for(int i = cells.length; i > 0; i--){
			Cell cell29_n = row29.getCell(cells[i-1]);
			if(!StringUtils.isEmpty(cell29_n.toString().trim())){
				seaMan.setShip_name(cell29_n.toString().trim());
				break ;
			}
		}
		//设定职务名称
		Row row32 = sheet.getRow(32);
		for(int i = cells.length; i > 0; i--){
			Cell cell32_n = row32.getCell(cells[i-1]);
			if(!StringUtils.isEmpty(cell32_n.toString().trim())){
				seaMan.setLevel(cell32_n.toString().trim());
				break ;
			}
		}
		wb.close();
		
		logger.info("获取下船人员信息完毕");	
		
		return true;
	}
	
	
}
